package com.itany.reflex;

import java.lang.reflect.Modifier;
import java.util.Arrays;

/**
 * Author:石小俊
 * Date: 2022/11/2 11:05
 */
public class Test02 {

    public static void main(String[] args) throws ClassNotFoundException {
        Class c = Class.forName("com.itany.reflex.Student");
//        Class c = User.class;
        // 获取类的全名,包含:包名.类名
        String className = c.getName();
        System.out.println("类全名:"+className);

        // 获取类名
        String simpleName = c.getSimpleName();
        System.out.println("类名:"+simpleName);

        // 获取实现的接口列表
        Class[] interfaces = c.getInterfaces();
        System.out.println("实现的接口:"+ Arrays.toString(interfaces));

        // 获取父类
        // 如果当前类没有继承任何一个类,则默认其父类为Object
        Class superClass = c.getSuperclass();
        System.out.println("父类:"+superClass);

        // 获取包名
        Package pg = c.getPackage();
        System.out.println("包名:"+pg.getName());

        // 判断是否是接口
        boolean flag = c.isInterface();
        System.out.println("该Class是否是接口:"+flag);

        // 获取修饰符
        int mod = c.getModifiers();
        // 可以通过ifXXX(mod)的方式判断是否是对应的修饰符
        // 也可以直接通过toString(mod)方法获取当前修饰符
        String modifier = Modifier.toString(mod);
        System.out.println("修饰符:"+modifier);

        try {
            // 调用无参构造创建对象
            Object obj = c.newInstance();
            System.out.println(obj);
        } catch (InstantiationException e) {
            e.printStackTrace();
            System.out.println("实例化失败异常,该类没有无参构造");
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            System.out.println("非法访问异常,无法访问私有的无参构造");
        }
    }

}
